package com.example.nutritionmanager.viewModels

import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.example.nutritionmanager.api.UserService
import com.example.nutritionmanager.data.TokenDataStore
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.inject.Inject

@HiltViewModel
class MainViewModel @Inject constructor(
    private val userService: UserService,
    val tokenDataStore: TokenDataStore
) : ViewModel() {
    private val TAG = "MainViewModel"

    fun checkTokenValidity(onValid: () -> Unit, onInvalid: (String) -> Unit) {
        viewModelScope.launch {
            try {
                // 同步获取 Token 并记录日志
                val token = tokenDataStore.getTokenSync()
                Log.d(TAG, "当前 Token: $token")

                if (token == null) {
                    Log.d(TAG, "没有找到 Token，导航到登录界面")
                    onInvalid("Token 不存在")
                    return@launch
                }

                // 切换到 IO 线程进行网络请求
                val response = withContext(Dispatchers.IO) {
                    userService.getUserProfile()
                }

                // 记录响应状态
                Log.d(TAG, "获取用户资料响应码: ${response.code()}, 消息: ${response.message()}")

                if (response.isSuccessful) {
                    // Token 有效，记录日志
                    val profile = response.body()
                    Log.d(TAG, "用户资料获取成功: $profile")
                    onValid()
                } else {
                    // Token 无效或过期，记录错误信息
                    Log.d(TAG, "Token 无效或过期，响应消息: ${response.message()}")
                    tokenDataStore.clearToken()
                    onInvalid("Token 已过期")
                }
            } catch (e: Exception) {
                // 网络或其他错误，记录异常信息
                Log.e(TAG, "Token 验证失败: ${e.localizedMessage}", e)
                tokenDataStore.clearToken()
                onInvalid("Token 验证失败: ${e.localizedMessage}")
            }
        }
    }
}
